<?php

class equipeReport extends Object{
    
    protected $vcomp      = null;
    protected $vis        = null;
    private   $tb_vcomp   = "";
    private   $tb_vis     = "";
    
    private   $cod_equipe = '';
    private   $cod_evento = '';
    public function __construct() {
        
        $this->LoadResource('database', 'db');
        $this->LoadModel('venda/visitacomp', 'vcomp');
        $this->LoadModel('venda/visita', 'vis');
        
        $this->tb_vcomp = $this->vcomp->getTable();
        $this->tb_vis   = $this->vis->getTable();
        $this->pkey_vis = $this->vis->getPkey();
    }
    
    public function init($cod_equipe, $cod_evento){
        $this->cod_equipe = $cod_equipe;
        $this->cod_evento = $cod_evento;
    }

    public function getEquipeTotal($dados = array()){
        $this->db->Join($this->tb_vis, $this->tb_vcomp, array($this->pkey_vis), array($this->pkey_vis), "LEFT");
        $adwhere = "$this->tb_vis.venda_equipe_cod = '$this->cod_equipe' AND $this->tb_vis.venda_evento_cod = '$this->cod_evento'
            AND $this->tb_vis.venda_visita_bdstatus = 'saved'";
        
        if(empty($dados)){
            $dados = array(
                "COUNT(DISTINCT $this->tb_vis.$this->pkey_vis) as 'Visitas'",
                "COUNT($this->tb_vcomp.venda_funcionario_cod) as 'Convidados'",
                "COUNT(IF(venda_visita_status = 'aprovou', 1, NULL)) as 'Aprovados'",
                "COUNT(IF(venda_visitacomp_status IN ('confirmado', 'compareceu','matriculado','naomatriculado'), 1, NULL)) as 'Confirmados'",
                //"COUNT(IF(venda_visitacomp_status IN ('negado'), 1, NULL)) as 'Negado'",
                //"COUNT(IF(venda_visitacomp_status IN ('pendente'), 1, NULL)) as 'Pendente'",
                "COUNT(IF(venda_visitacomp_status IN ('compareceu','matriculado','naomatriculado'), 1, NULL)) as 'Presentes'",
                "COUNT(IF(venda_visitacomp_status = 'matriculado', 1, NULL)) as 'Matriculados'",
            );
        }
        return $this->vis->selecionar($dados, $adwhere);
    }
    
    public function getEquipeMedia(){
        $this->LoadModel('venda/integrante', 'in');
        $numvendedores = $this->in->getNumUsersOfEquipe($this->cod_equipe);
        $this->tb_vis = $this->vis->getTable();
        
        $dados = array(
            "COUNT(DISTINCT $this->tb_vis.$this->pkey_vis)/$numvendedores as 'Visitas'",
            "COUNT(DISTINCT $this->tb_vcomp.venda_funcionario_cod)/$numvendedores as 'Convidados'",
            "COUNT(IF(venda_visita_status = 'aprovou', 1, NULL))/$numvendedores as 'Aprovados'",
            "COUNT(IF(venda_visitacomp_status IN ('confirmado', 'compareceu','matriculado','naomatriculado'), 1, NULL))/$numvendedores as 'Confirmados'",
            //"COUNT(IF(venda_visitacomp_status IN ('negado'), 1, NULL))/$numvendedores as 'Negado'",
            //"COUNT(IF(venda_visitacomp_status IN ('pendente'), 1, NULL))/$numvendedores as 'Pendente'",
            "COUNT(IF(venda_visitacomp_status IN ('compareceu','matriculado','naomatriculado'), 1, NULL))/$numvendedores as 'Presentes'",
            "COUNT(IF(venda_visitacomp_status = 'matriculado', 1, NULL))/$numvendedores as 'Matriculados'",
        );
        
        return $this->getEquipeTotal($dados);
    }
    
    public function relatorioFuncionarios(){
        
        $this->tb_vis = $this->vis->getTable();
        $this->db->Join($this->tb_vis, $this->tb_vcomp, array($this->pkey_vis), array($this->pkey_vis), "LEFT");
        
        $this->LoadModel('usuario/login', 'uobj');
        $tb_user = $this->uobj->getTable();
        $this->db->Join($this->tb_vcomp, $tb_user, array('cod_usuario'), array('cod_usuario'), "LEFT");
        
        $this->LoadModel('venda/meta', 'meta');
        $tb_meta = $this->meta->getTable();
        $this->db->Join($this->tb_vis, $tb_meta, 
                array('venda_evento_cod', 'venda_equipe_cod', 'cod_usuario'), 
                array('evento', 'equipe', 'usuario'), 
                "LEFT"
        );
        
        $campos = array(
            "$tb_user.user_name as Vendedor",
            "$tb_meta.meta as Meta",
            "COUNT(DISTINCT $this->tb_vis.$this->pkey_vis) as 'Visitas'", 
            "COUNT(DISTINCT $this->tb_vcomp.venda_funcionario_cod) as 'Convidados'",
            "COUNT(IF(venda_visita_status = 'aprovou'   , 1, NULL)) as Aprovados",
            "COUNT(IF(venda_visitacomp_status IN ('confirmado', 'compareceu','matriculado','naomatriculado'), 1, NULL)) as Confirmados",
            //"COUNT(IF(venda_visitacomp_status IN ('negado'), 1, NULL)) as 'Negado'",
            //"COUNT(IF(venda_visitacomp_status IN ('pendente'), 1, NULL)) as 'Pendente'",
            "COUNT(IF(venda_visitacomp_status IN ('compareceu','matriculado','naomatriculado'), 1, NULL)) as Presentes",
            //"COUNT(IF(venda_visitacomp_status IN ('ausente'), 1, NULL)) as Ausentes",
            "COUNT(IF(venda_visitacomp_status = 'matriculado', 1, NULL)) as 'Matriculados'",
            "COUNT(IF(venda_visitacomp_status IN ('confirmado', 'compareceu','matriculado','naomatriculado'), 1, NULL))/COUNT(IF(venda_visitacomp_status IN ('compareceu','matriculado','naomatriculado'), 1, NULL)) as 'Taxa de Presença'",
            "COUNT(IF(venda_visitacomp_status = 'matriculado', 1, NULL))/$tb_meta.meta as 'Efetividade'",
        );
        $group = "GROUP BY $this->tb_vis.cod_usuario";
        $adwhere = "$this->tb_vis.venda_equipe_cod = '$this->cod_equipe' AND $this->tb_vis.venda_evento_cod = '$this->cod_evento'
            AND $this->tb_vis.venda_visita_bdstatus = 'saved' $group";
        return $this->vis->paginate(0, '', '', '', 100000, $campos, $adwhere, "Visitas DESC");
    }
    
    
    public function detalhar($cod_vendedor, $detalhar, $model){
        $this->LoadModel('venda/visitacomp', 'vis');
        $this->LoadModel('venda/visita', 'v');
        $this->tb_vis = $this->v->getTable();
        
        $this->model = ($model == "venda/visitacomp")?$this->vis:$this->v;
        $tb = ($detalhar != "visita")? $this->model->getTable(): $this->tb_vis;
        
        $wh     = "";
        switch ($detalhar){
            case 'visitas':
                $wh = "";
                break;
            case 'convidados':
                $wh = "AND venda_visita_status != 'recusou'";
                break;
            case 'aprovados':
                $wh = "AND venda_visita_status = 'aprovou'";
                break;
            case 'confirmados': 
                $wh = "AND venda_visitacomp_status = 'confirmado'";
                break;
            case 'presentes':
                $wh = "AND venda_visitacomp_status = 'compareceu'";
                break;
        }
        $where = "venda_equipe_cod = '$this->cod_equipe' AND $this->tb_vis.venda_evento_cod = '$this->cod_evento' AND $tb.cod_usuario = '$cod_vendedor' $wh";
        return $this->model->paginate(0, '', '', '', 100000, array(), $where);
    }
}

?>
